$("input").iCheck({
    checkboxClass: "icheckbox_flat-blue",
});

// 购物车模块
//数量加减
$('.count>button:nth-child(1)').click(function(){
    //下面的函数需要 所以这里就变成一个变量
    let obj = this
    let count = parseInt($(obj).next().val())
    if(count > 1){
        //发送post请求 看看条件是否在满足
        update_count(count-1,obj,callback=function(){
            //用回调函数，如果成功了就改变数量，改变小计和总计
            $(obj).next().val(count-1)
            count = parseInt($(obj).next().val())

            //计算小计
            small_total(obj,count)

            //计算总价和件数
            total_price()
        })
    }
})
$('.count>button:nth-child(3)').click(function(){
    let obj = this
    let count = parseInt($(obj).prev().val())
    //发送post请求 看看条件是否在满足
    update_count(count+1,obj,callback=function(){
        //用回调函数，如果成功了就改变数量，改变小计和总计
        $(obj).prev().val(count+1)
        count = parseInt($(obj).prev().val())

        //计算小计
        small_total(obj,count)

        //计算总价和件数
        total_price()
    })
})

//用户自己输入
$('div.count > input[type=text]').blur(function () {
    let obj = this
    let sku_stock = $(obj).prop('class')
    let count = $(this).val();
    if (isNaN(count) || count.trim().length == 0 || parseInt(count) <= 0) {
        count = 1;
    }
    if(parseInt(count)>parseInt(sku_stock)){
        //首先直接在这里判断是否为超出了
        alert('商品库存不足，该商品库存为：'+sku_stock)
        $(obj).val(parseInt(sku_stock));
        //超出了那么把数目改为库存数量，因为后面post请求里面还有一个判断，这样就有两个提示了，所以这里提示完之后给他改掉，在这里坐提示也是为了能够把input值改为库存数量
        count = sku_stock
    }

    update_count(count,obj,callback=function(){
        //用回调函数，如果成功了就改变数量，改变小计和总计
        $(obj).val(parseInt(count));

        //计算小计
        small_total(obj,count)

        //计算总价和件数
        total_price()
    })
})

//全选配置
$('#all').on('ifClicked', function(){
    //因为下面的单选需要操作这个，如果用了changed那么少选一个单选这个全选就得被取消这样一来其他选上的单选全被取消，所以用了点击事件
    //这里因为用了点击事件点击完成后他的checked状态还没有改变，改变完后下一个点击事件才会生效，所以给他反着来
    if (!$(this).is(":checked")){
        $('.one').iCheck('check')
    }
    else{
        $('.one').iCheck('uncheck')
    }

    //计算总价和件数
    total_price()
});
//单选匹配
$('.one').on('ifChanged',function(){
    //改变背景颜色
    if($(this).is(':checked')){
        $(this).parents('li').css('background-color','#ceefe4')
    }
    else{
        $(this).parents('li').css('background-color','#fff')
    }

    // 这里设一个标志
    let flag = true;
    $('.one').each(function(index,item){
        if(!$(item).prop('checked')){
            //如果全部单选框内有一个没被选中那么标志false，以便下面操作
            flag = false;
        }
    })
    if(flag){
        $('#all').iCheck('check')
    }
    else{
        $('#all').iCheck('uncheck')
    }

    //计算总价和件数
    total_price()
})

//计算总价和件数 封装成函数
function total_price(){
    let total_price = 0
    $('.one:checked').each(function(index,item){
        let li = $(item).parents('li')
        //每一个选择上的单选累加价格和数目
        total_price += (li.children('.small_total').children().html())*1
    })
    
    $('div.calculate > div:nth-child(2) > div:nth-child(1) > strong').html(total_price.toFixed(2))
    $('div.calculate > div:nth-child(2) > div:nth-child(2) > span').html($('.one:checked').length)
}
total_price()
//计算小计
function small_total(obj,count){
    //找到单价 这个每一个元素的用一个关系层面上
    let unit_price = $(obj).parent().prev().children().html()
    $(obj).parent().next().children().html((unit_price*count).toFixed(2))
}

//更新商品数量
//每次加减和自己输入都会调用此方法发送一次post请求更改数据库数据
function update_count(count,obj,callback=none){
    //sku_id在删除的a链接上有，从那里拿过来
    let sku_id = $(obj).parents('li').find('.delete').children().prop('class')
    let csrfmiddlewaretoken = $('input[type=hidden]').val()
    $.post(
        "/cart/update",
        {'sku_id':sku_id,'count':count,'csrfmiddlewaretoken':csrfmiddlewaretoken},
        function(data){
            if(data.res==5){
                console.log(data.errmsg)
                //利用回调函数  加减输入完毕后如果满足后台的全部需求那么就更改前端的数据，否则提示错误信息前端不做更改
                callback && callback()
            }
            else if(data.res==4){
                alert(data.errmsg+'，该商品库存为：'+data.sku_stock)
            }
            else{
                alert(data.errmsg)
            }
        }
    )
}

//删除
$('.delete>a').click(function () {
    let li = $(this).parents('li')
    let sku_id = $(this).prop('class')
    let csrfmiddlewaretoken = $('input[type=hidden]').val()
    let M = {};
    if(M.dialog3){
        return M.dialog3.show();
    }
    M.dialog3 = jqueryAlert({
        'title'   : '购物车移出提醒',
        'content' : '您确定要将该商品移出购物车吗？',
        'modal'   : true,
        'buttons' :{
            '确定' : function(){
                $.post(
                    "/cart/remove",
                    {'sku_id':sku_id,'csrfmiddlewaretoken':csrfmiddlewaretoken},
                    function(data){
                        if(data.res == 1){
                            li.stop().slideUp(500,function () {
                                //动画结束移出元素
                                li.remove()

                                //计算总价和件数  动画结束已出完参数之后再计算才能准确
                                total_price()
                            });
                            M.dialog3.close();
                            //更新购物车数字
                            $('div.total_product_count > strong').html(data.count)
                        }
                        else{
                            alert(data.errmsg)
                        }
                    }
                )
            },
            '我再想想' : function(){
                M.dialog3.close();
                //if(M.dialog31){
                //    return M.dialog31.show();
                //}
                //M.dialog31 = jqueryAlert({
                //    'content' : '我不是程序员...'
                //})
            }
        }
    })
})

$('#all,.one').iCheck('check')